#ifndef PLUGINSMANAGER_H
#define PLUGINSMANAGER_H

#include <QObject>
#include <QPluginLoader>
#include <QVariant>
#include <QDir>

#include "PluginsManagerPrivate.h"

#include "interface/PluginMetaData.h"

class PluginsManager : public QObject
{
    Q_OBJECT
public:
    ~PluginsManager();
    static PluginsManager &getInstance(){
        static PluginsManager m_instance;
        return m_instance;
    }
    
public:
    //获取插件所在目录
    QDir getPulingPath();
    
    //加载所有插件
    void loadAllPlugins();
    
    //扫描json中的插件元数据
    void scan(const QString &filePath);
    
    //加载其中摸个插件
    void loadPlugin(const QString &filePath);
    
    //卸载所有插件
    void unloadAllPluings();
    
    //卸载某个插件
    void unloadPlugin(const QString &filePath);
    
    //获取所有插件
    QList<QPluginLoader *> allPlugins();
    
    //获取某个插件    
    QPluginLoader * getPlugin(const QString &name);
    //!获得某个插件的名字
    QString getName( QPluginLoader * loader);
    void logAllPlugins();
    //!初始化 信号和槽
    void initSignalAndSlot();
    
public slots:
    //! 接受来自插件的消息
    void recMsgfromPlugin(PluginMetaData metadata);
	
private:
    PluginsManager();
    PluginsManagerPrivate *d;


    
};

#endif // PLUGINSMANAGER_H
